iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Software Development

跟著 OXXO 一起學 Python系列 第 7

( Day 5.2 ) Python 邏輯判斷 ( and 和 or )

  • 分享至 

  • xImage
  •  

在邏輯判斷時,很常使用 and、or 的邏輯運算子,然而 Python 裡的 and 和 or 除了可以回傳 True 和 False,更可以回傳比較後的值,這篇教學將會介紹 Python 裡 and 和 or 的用法。

原文參考:邏輯判斷 ( and 和 or )

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

and 和 or 的使用原則

在 Python 裡使用 and 與 or 回傳值時,會遵照下列幾個原則進行:

  • 使用 and 運算,如果全部都是 True,回傳最右邊 True 的值,否則回傳第一個 False 的值。
  • 使用 or 運算,如果全為 False,回傳最右邊 False 的值,否則回傳第一個 True 的值。
  • 元素除了 0、空 ( 空字串、空列表...等 )、None 和 False,其他在判斷式裡,全都是 True。
  • 越左方 ( 越前方 ) 會越先判斷,逐步往右邊判斷
  • 除了從左向右判斷,同時使用多個 and、or 或 not,會先判斷 not,再判斷 and,最後再判斷 or

在判斷式裡使用 and 和 or

通常 and 和 or 會出現在邏輯判斷裡,下方的例子使用 and 必須前後條件都滿足,使用 or 只需要滿足其中一項

a = 1
b = 2
c = 3
if a<b and a<c:
    print('ok1')    # 顯示 ok1
if a<b or a>c:
    print('ok2')    # 顯示 ok2

如果有好幾個 or,越左方 ( 越前方 ) 會越先判斷,逐步往右邊判斷

a = 2
b = 3
c = 0
if a>b or a<c or a==2:
    print('ok1')       # 印出 ok1

如果同時有 and 和 or,則會先判斷 and,然後再接著從左向右判斷:

a = 2
b = 3
c = 0
if a>b or a<c or a==2 and b==4:    # 效果等同 (a>b or a<c) or (a==2 and b==4)
    print('ok1')
else:
    print('XXX')       # 印出 XXX

下方的例子也會先判斷 and,然後再接著從左向右判斷:

a = 2
b = 3
c = 0
if a>b or a<c and a==2 or b==4:    # 效果等同 (a>b or (a<c and a==2)) or b==4
    print('ok1')
else:
    print('XXX')       # 印出 XXX

使用 and 和 or 回傳值

下方的例子可以看出按照原則,分別會回傳不同的值:

a = 1 and 2 and 3
print(a)            # 3,全部都 True,所以回傳最右邊的值

b = 1 and 0 and 2
print(b)            # 0,遇到 0 ( False ),回傳第一個 False 的值就是 0

c = 1 or 2 or 3
print(c)            # 1,全部都 True,所以回傳第一個值

d = 1 or 0 or 3
print(d)            # 1,遇到 0 ( False ),回傳第一個 True 的值就是 1

e = 1 and 2 or 3
print(e)            # 2,效果等同 1 and ( 2 or 3 )

f = 1 or 2 and 3
print(f)            # 1,效果等同 1 or ( 2 and 3 ),2 和 3 先取出 3 之後變成 1 or 3

g = 1 and 2 or 3 and 4 or 5
print(g)            # 2,效果等同 1 and ( 2 or ( 3 and ( 4 or 5 )))

如果將回傳值應用在判斷式裡,就會直接當作 True 或 False 使用,例如下方的例子,會一次判斷 a、b、c 三個變數的數值。

a = 1
b = 2
c = 3
if(a and b and c):   # 回傳 3 --> True
    print('ok')      # 印出 ok

改成下方的例子,就會印出 not ok。

a = 1
b = 0               # b 等於 0
c = 3
if(a and b and c):  # 回傳 0 --> False
    print('ok')
else:
    rint('not ok')  # 印出 not ok

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 5.1 ) Python 邏輯判斷 ( if、elif、else )
下一篇
( Day 5.3 ) Python 重複迴圈 ( for、while )
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言